from django.conf import settings
from piston.handler import AnonymousBaseHandler

from mobile.models import *

#/api/v1.0/accesos/
class AccesosHandler(AnonymousBaseHandler):
    """
        Existen tres maneras de consumir los accesos
            - ciudad=(Bilbao, San Sebasitan, Vitoria-Gasteiz)
            - id=<id>
            - name=<name>
    """
    model = Entry

    def read(self, request):
        accesos = None
        ciudad = request.GET.get('ciudad', False)
        if ciudad:
            accesos = Entry.objects.filter(city__name=ciudad)
        
        name = request.GET.get('name', False)
        if name:
            accesos = Entry.objects.filter(name=name)
        
        a_id = request.GET.get('id', False)
        if a_id:
            accesos = Entry.objects.filter(id=a_id)
            
        if not accesos:
            accesos = Entry.objects.all()
        
        out = []
        for acceso in accesos:
            data = {}
            data['id'] = acceso.id
            data['name'] = acceso.name
            data['city'] = acceso.city.name
            data['label'] = acceso.label
            
            last_capture = acceso.get_last_capture()
            data['status'] = last_capture.status
            data['status_display'] = last_capture.get_status_display()
            data['capture'] = last_capture.created
            
            cameras = [(camera.name, camera.url) for camera in acceso.get_cameras()]
            data['cameras'] = cameras
            out.append(data)
        return out

#/api/v1.0/incidencias/
class IncidenciasHandler(AnonymousBaseHandler):
    """
        Existen dos maneras de consumir las incidencias
            - ciudad=(Bilbao, San Sebasitan, Vitoria-Gasteiz)
            - carretera=<carretera>
    """
    model = CAPVIncident

    def read(self, request):
        incidencias = None
        #tomar la ultima captura
        capture = CAPVIncidentCapture.get_last_capture()
        
        ciudad = request.GET.get('ciudad', False)
        if ciudad:
            incidencias = CAPVIncident.objects.filter(municipio__name=ciudad)
            
        carretera = request.GET.get('carretera', False)
        if carretera:
            incidencias = CAPVIncident.objects.filter(carretera__name=carretera)
        
        if not incidencias:
            incidencias = CAPVIncident.objects.filter(capture=capture)
        return incidencias

#/api/v1.0/puertos/
class PuertosHandler(AnonymousBaseHandler):
    """
        Existen cuatro maneras de consumir las incidencias
            - provincia=(Alava, Vizcaya, Guipuzcoa, Madrid, Soria...)
            - carretera=<carretera>
            - name=<name>
            - red=<red>
    """
    model = CAPVPuertoIncident

    def read(self, request):
        capture = CAPVPuertoCapture.get_last_capture()
        epuertos = None
        
        name = request.GET.get('name', False)
        if name:
            epuertos = CAPVPuertoIncident.objects.filter(puerto__name__iexact=name,capture=capture)
        
        provincia = request.GET.get('provincia', False)
        if provincia:
            epuertos = CAPVPuertoIncident.objects.filter(puerto__provincia__name__iexact=provincia,capture=capture)
        
        carretera = request.GET.get('carretera', False)
        if carretera:
            epuertos = CAPVPuertoIncident.objects.filter(puerto__carretera__name__iexact=carretera,capture=capture)
        
        red = request.GET.get('red', False)
        if red:
            epuertos = CAPVPuertoIncident.objects.filter(puerto__red__iexact=red,capture=capture)
        
        if not name and not provincia and not carretera and not red:
            epuertos = CAPVPuertoIncident.objects.filter(capture=capture)
        
        out = []
        for estado in epuertos:
            puerto = estado.puerto
            data = {}
            data['point'] = puerto.point
            data['name'] = puerto.name
            data['label'] = puerto.label
            data['red'] = puerto.red
            data['provincia_id'] = puerto.provincia.id
            data['provincia'] = puerto.provincia.name
            data['carretera_id'] = puerto.carretera.id
            data['carretera'] = puerto.carretera.name
            data['situacion'] = estado.situacion
            data['estado_turismos'] = estado.estado_turismos
            data['estado_articulados'] = estado.estado_articulados
            data['estado_camiones'] = estado.estado_camiones
            data['vialidad'] = estado.vialidad
            data['capture_id'] = estado.capture.id
            data['capture_datetime'] = estado.capture.datetime
            out.append(data)        
        return out

#/api/v1.0/camaras/
class CamarasHandler(AnonymousBaseHandler):
    """
        Existen cuatro maneras de consumir las incidencias
            - provincia=(Alava, Vizcaya, Guipuzcoa, Madrid, Soria...)
            - carretera=<carretera>
            - name=<name>
            - municipio=<municipio>
    """
    model = Camera

    def read(self, request):
        cameras = None
        
        name = request.GET.get('name', False)
        if name:
            cameras = Camera.objects.filter(name=name)
            
        carretera = request.GET.get('carretera', False)
        if carretera:
            cameras = Camera.objects.filter(carretera__name=carretera)
        
        municipio = request.GET.get('municipio', False)
        if municipio:
            cameras = Camera.objects.filter(municipio__name=municipio)
            
        provincia = request.GET.get('provincia', False)
        if provincia:
            cameras = Camera.objects.filter(provincia__name=provincia)
        
        if not name and not carretera and not municipio and not provincia:
            cameras = Camera.objects.all()
        return cameras